<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 类的静态属性
        // class本身的属性，不需要实例化
        // class Foo{}
        // Foo.prop=1;
        // let foo=new Foo();
        // console.log(foo.prop);//undefined
        // console.log(Foo.prop);//1

        // class Example{
        //     static a=2
        // }
        // console.log(Example.a)



        // 类的静态方法 通过类直接调用，不能通过实例调用
        // class Example{
        //     static sum(a,b){
        //         return a+b
        //     }
        // }
        // let example=new Example();
        // console.log(example)
        // console.log(Example.sum(1,2))

        // class Father{
        //     getX=function(){

        //     }
        //     static getY=function(){

        //     }
        // }
        // let person=new Father();
        // console.log(person)
        // 类的私有方法
        // class Widget{
        //     foo(){console.log('foo')}
        //     _bar(){console.log('_bar')}
        // }
        // let w=new Widget()
        // console.log(w)
        // w.foo()
        // w._bar()
        // w.bar()
        // class Widget{
        //     foo(){
        //         console.log('foo')
        //         bar.call(this,'str')
        //     }
        // }
        // function bar(str){
        //     console.log('bar')
        // }
        // let w=new Widget();
        // console.log(w)

        // let obj={
        //     name:'zs',
        //     age:18
        // }
        // // let name=obj.name;
        // // let age=obj.age
        // let {na,age}=obj

        // class Logger {
        //     constructor() {
        //         this.printName = this.printName.bind(this)
        //     }
        //     printName() {
        //         this.print()
        //     }
        //     print() {}
        // }
        // const logger = new Logger();
        // const {
        //     printName
        // } = logger;
        // printName()

        // // 类的私有属性 只能在类的定义中访问
        // class Point {#
        //     x;
        //     constructor() {
        //         this.#x = 1
        //     }
        //     foo() {
        //         return this.#x
        //     }
        // }
        // let point = new Point()
        //     // console.log(point.#x)
        //     // console.log(Point.#x)
        // console.log(point.foo())

        // ES6之前实现继承可以使用
        // 原型继承
        // call继承
        // 组合继承

        // super关键字在子类中三种作用
        // 作为父类的构造方法调用
        // 作为父类的实例调用
        // 作为父类调用
    </script>
</body>

</html>